<?php

class Application_Model_User
{

}

/**
* Класс для работы с учетными записями пользователей
*
* @author Max Zamaliev <zamal@i-vostok.ru>
* @copyright 2012 www.i-vostok.ru
*
*/
class User extends Application_Model_User
{

/**
*
* @var Db_Users
*/
    protected $db_users;
    
/**
*
* @var Db_Contacts
*/
    protected $db_contacts;
    
/**
*
* @var Db_Roles
*/
    protected $db_roles;


    public $confirmEmail=true;
    
/**
*
* Конструктор класса
*
* @return void
*/
    public function __construct()
    {
	Zend_Loader::loadclass('Db_Users');
	Zend_Loader::loadclass('Db_Contacts');
	Zend_Loader::loadclass('Db_EmailConfirm');
	Zend_Loader::loadclass('Db_Roles');

	$this->db_users 	= new Db_Users();
	$this->db_contacts	= new Db_Contacts();
	$this->db_emailconfirm	= new Db_EmailConfirm();
	$this->db_roles		= new Db_Roles();
    }


//Вход/Выход********************************************************

/**
* Вход пользователя в систему
*
*
* @param string $login 		- логин для входа пользователя
* @param string $password	- пароль пользователя
*
* @return int|false		- id пользователя в БД либо false при неудаче
*
*/
    public function login($login,$password)//
    {
	$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter(), 'users', 'login', 'password');
	$authAdapter->setIdentity($login);
	$authAdapter->setCredential(md5($password));
	$auth = Zend_Auth::getInstance();
	$loginAuth = $auth ->authenticate($authAdapter);
	if($loginAuth->isValid()) 
	{
	    $userData = $authAdapter->getResultRowObject(null,'password');
	    $auth->getStorage()->write($userData);
	    return $userData->id;
	}
	else
	{
	    return false;
	};    
    }

/**
*
* Выход пользователя из системы
* 
* @return void
*
*/
    public function logout()//
    {
	$auth = Zend_Auth::getInstance();
	$auth->clearIdentity();
	Zend_Session::forgetMe();
	Zend_Session::expireSessionCookie();
	return;
    }


//Проверки***********************************************************
/**
*
* Проверка наличия id пользователя в БД
*
* @param int $id	- id пользователя
* @return true|false 	- найден или нет
*
*/
    public function isIdValid($id)//
    {
	return ($id) ? $this->db_users->checkId($id) : false ;
    }

/**
*
* Проверка наличия логина в БД
*
* @param string $login
* @return true|false
*
*/
    public function isLoginExists($login)//
    {
	return $this->db_users->checkLogin($login);
    }

/**
*
* Проверка наличия email в БД
*
* @param string $email
* @return true|false
*
*/
    public function isEmailExists($email)//
    {
	return $this->db_users->checkEmail($email);
    }

/**
*
* Проверка залогинен ли уже текущий пользователь
*
* @return true|false
*
*/
    public function isLogined()//
    {
    //Необходимо будет добавить проверку по id
//	if ($this->isIdValid($id))
//	{
	    return (Zend_Auth::getInstance()->hasIdentity()) ? true : false ;
//	}
//	else
//	    return false;
    }

//Добавление/удаление***********************************************

/**
*
* Добавление нового пользователя
*
*
* @param string $login
* @param string $password
* @param string $email
*
* @return int id
*
*/
    public function addUser($login,$password,$email)
    {
	    return $this->db_users->addUser($login,$password,$email);
    }
    
    public function delUser($id)//
    {
	$this->db_contacts->delContacts($id);
	$this->db_emailconfirm->delEmailConfirmById($id);
	//Необходимо будет добавить удаление данных из Db_Roles!!!
	return $this->db_users->delUser($id);
    }


//Подтверждение почтового ящика**************************************


    public function addEmailConfirm($id)//
    {
	return ($this->isIdValid($id)) ? $this->db_emailconfirm->addEmailConfirm($id,$this->db_users->getEmail($id)) : false ;
    }
    
    public function delEmailConfirmByHash($hash)//
    {
	return $this->db_emailconfirm->delEmailConfirmByHash($hash);
    }

    public function delEmailConfirmById($id)//
    {
	return $this->db_emailconfirm->delEmailConfirmById($id);
    }

    public function isEmailConfirmed($id)//
    {
	return $this->db_emailconfirm->isEmailConfirmed($id);
    }
    
//Чтение/изменение параметров пользователя ******************************    
    public function getMyId()//
    {
	return $this->isLogined() ? (Zend_Auth::getInstance()->getStorage()->read()->id): false;
    }    

    public function getEmail($id)//
    {
	return $this->db_users->getEmail($id);
    }
    
    public function setEmail($value,$id)//
    {
	return ($this->isIdValid($id)) ? $this->db_users->setEmail($id,$value) : false ;
    }


    public function getName($id)//
    {
	    return $this->db_contacts->getName($id);
    }
    
    public function setName($value,$id)//
    {
	return ($this->isIdValid($id)) ? $this->db_contacts->setName($id,$value) : false ;
    }


    public function getICQ($id)//
    {
	    return $this->db_contacts->getICQ($id);
    }
    
    public function setICQ($value,$id)//
    {
	return ($this->isIdValid($id)) ? $this->db_contacts->setICQ($id,$value) : false;
    }

    public function getJabber($id)//
    {
	    return $this->db_contacts->getJabber($id);
    }
    
    public function setJabber($value,$id)//
    {
	return ($this->isIdValid($id)) ? $this->db_contacts->setJabber($id,$value) : false ;
    }

    public function getSkype($id)//
    {
	    return $this->db_contacts->getSkype($id);
    }
    
    public function setSkype($value,$id)//
    {
	return ($this->isIdValid($id)) ? $this->db_contacts->setSkype($id,$value) : false ;
    }

    public function getSIP($id)//
    {
	    return $this->db_contacts->getSIP($id);
    }
    
    public function setSIP($value,$id) 
    {  
	return ($this->isIdValid($id)) ? $this->db_contacts->setSIP($id,$value) : false ;  
    }

}
